#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int dig[10];
//dp[i][0]表示i位数不含62和不含4的个数
//dp[i][1]表示i位数不含62和不含4且最高为是2的个数
//dp[i][2]表示i位数含有62或含有4的个数
long long dp[10][3];
void init(){
    dp[0][0]=1;
    dp[0][1]=0;
    dp[0][2]=0;
    for(int i=1;i<=9;i++){
        dp[i][0]=dp[i-1][0]*9-dp[i-1][1];
        dp[i][1]=dp[i-1][0];
        dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0];
    }
}
long long solve(long long n){
    memset(dig,0,sizeof(dig));
    int k=0;
    while(n){
        dig[++k]=n%10;
        n/=10;
    }
    // for(int i=k;i>=1;i--){
    //     printf("%d ",dig[i]);
    // }
    // printf("\n");
    long long ans=0;
    bool flag=false;
    for(int i=k;i>=1;i--){
        //不用这一位，前i-1位已经满足62或者4
        //这一位可以放10个数
        ans+=dp[i-1][2]*dig[i];
        //标记这一位和后一位i+1是否满足62或这一位是否是4
        if(flag){
            //如果是，前面的i-1位不管是什么都可以
            ans+=dp[i-1][0]*dig[i];
        }
        else{
            //否则，如果当前位大于6，说明可以取6，加上前i-1位取2的
            if(dig[i]>6){
                ans+=dp[i-1][1];
            }
            //WA点
            //如果后一位是6,而这一位大于2,说明可以取2
            if(dig[i+1]==6 && dig[i]>2){
                ans+=dp[i][1];
            }
            //同理，这一位可以取4,不管前i-1位了
            if(dig[i]>4){
                ans+=dp[i-1][0];
            }
        }
        //WA点 少了一个dig[i]==4
        if(dig[i]==2 && dig[i+1]==6 || dig[i]==4){
            flag=true;
        }
    }
    return ans;
}
int main(void){
    init();
    long long a,b;
    while(~scanf("%lld%lld",&a,&b)){
        if(a==0 && b==0){
            break;
        }
        printf("%lld\n",b+1-a-(solve(b+1)-solve(a)));
    }
    return 0;
}
